package cn.gpnusz.oliverwiki.controller;

import cn.gpnusz.oliverwiki.req.UserLoginReq;
import cn.gpnusz.oliverwiki.req.UserQueryReq;
import cn.gpnusz.oliverwiki.req.UserResetPasswordReq;
import cn.gpnusz.oliverwiki.req.UserSaveReq;
import cn.gpnusz.oliverwiki.resp.CommonResp;
import cn.gpnusz.oliverwiki.resp.UserLoginResp;
import cn.gpnusz.oliverwiki.resp.UserQueryResp;
import cn.gpnusz.oliverwiki.resp.PageResp;
import cn.gpnusz.oliverwiki.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * @author h0ss
 * @description 用户信息系统controller
 * @date 2021/9/20 - 00:46
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    /**
     * 展示所有用户信息数据
     *
     * @param userQueryReq : 请求参数（分页参数）
     * @return : cn.gpnusz.oliverwiki.resp.CommonResp<cn.gpnusz.oliverwiki.resp.PageResp<cn.gpnusz.oliverwiki.resp.UserQueryResp>>
     * @author h0ss
     */
    @RequestMapping("/list")
    public CommonResp<PageResp<UserQueryResp>> list(@Valid UserQueryReq userQueryReq) {
        CommonResp<PageResp<UserQueryResp>> resp = new CommonResp<>();
        resp.setMessage("数据获取成功!");
        resp.setContent(userService.getAll(userQueryReq));
        return resp;
    }

    /**
     * 按传入条件查询用户信息
     *
     * @param userQueryReq : 用户信息查询参数
     * @return : cn.gpnusz.oliverwiki.resp.CommonResp<cn.gpnusz.oliverwiki.resp.PageResp<cn.gpnusz.oliverwiki.resp.UserQueryResp>>
     * @author h0ss
     */
    @RequestMapping("/search")
    public CommonResp<PageResp<UserQueryResp>> search(@Valid UserQueryReq userQueryReq) {
        CommonResp<PageResp<UserQueryResp>> resp = new CommonResp<>();
        resp.setMessage("数据获取成功!");
        resp.setContent(userService.getAllByCondition(userQueryReq));
        return resp;
    }

    /**
     * 新增/编辑用户信息
     *
     * @param userSaveReq :
     * @return : cn.gpnusz.oliverwiki.resp.CommonResp<java.lang.Object>
     * @author h0ss
     */
    @PostMapping("/save")
    public CommonResp<Object> save(@Valid @RequestBody UserSaveReq userSaveReq) {
        userService.save(userSaveReq);
        return new CommonResp<>();
    }

    /**
     * 重置密码接口
     *
     * @param userResetPasswordReq : 重置密码用户信息
     * @return : cn.gpnusz.oliverwiki.resp.CommonResp<java.lang.Object>
     * @author h0ss
     */
    @PostMapping("/resetPassword")
    public CommonResp<Object> resetPassword(@Valid @RequestBody UserResetPasswordReq userResetPasswordReq) {
        userService.resetPassword(userResetPasswordReq);
        return new CommonResp<>();
    }

    /**
     * 用户登录接口
     *
     * @param userLoginReq : 用户登录请求信息
     * @return : cn.gpnusz.oliverwiki.resp.CommonResp<cn.gpnusz.oliverwiki.resp.UserLoginResp>
     * @author h0ss
     */
    @PostMapping("/login")
    public CommonResp<UserLoginResp> login(@Valid @RequestBody UserLoginReq userLoginReq) {
        UserLoginResp userloginresp = userService.login(userLoginReq);
        CommonResp<UserLoginResp> resp = new CommonResp<>();
        resp.setContent(userloginresp);
        resp.setSuccess(true);
        return resp;
    }

    /**
     * 退出登陆接口
     *
     * @param token : 用户标识token
     * @return : cn.gpnusz.oliverwiki.resp.CommonResp<java.lang.Object>
     * @author h0ss
     */
    @GetMapping("/logout/{token}")
    public CommonResp<Object> logout(@PathVariable String token) {
        userService.logout(token);
        return new CommonResp<>();
    }


    /**
     * 根据id删除用户信息
     *
     * @param id :
     * @return : cn.gpnusz.oliverwiki.resp.CommonResp<java.lang.Object>
     * @author h0ss
     */
    @DeleteMapping("/delete/{id}")
    public CommonResp<Object> delete(@PathVariable Long id) {
        userService.delete(id);
        return new CommonResp<>();
    }


}
